<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>2_不用函数柯里化实现</title>
  </head>
  <body>
    <!-- 准备号一个容器 -->
    <div id="test"></div>

    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom，用于支持react dom操作 -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- 引入babel，用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/babel">
      // #region
      /**
       * 高阶函数：如果一个函数符合下面2个规范中的任何一个，那么这个函数就是一个高阶函数
       * 1. 若A函数接收的参数是一个函数，那么A就可以称之为高阶函数
       * 2. 若A函数调用的返回值仍然是一个函数，那么A就可以称之为高阶函数
       * 常见的高阶函数：Promise，setTimeout，map
       *
       * 函数柯里化：通过函数调用继续返回函数的形式，实现多次接收参数最后统一处理的函数编码形式
       */
      // #endregion
      // 1. 创建类组件
      class Login extends React.Component {
        // 初始化状态
        state = {
          username: '',
          password: ''
        }

        saveFormItemData = (dataType, event) => {
          this.setState({ [dataType]: event.target.value })
        }

        handleSubmit = event => {
          const { username, password } = this.state
          alert(`用户名：${username}，密码：${password}`)
        }

        render() {
          return (
            <form onSubmit={this.handleSubmit}>
              用户名：
              <input type="text" name="username" onChange={event => this.saveFormItemData('username', event)} />
              密码：
              <input type="password" name="password" onChange={event => this.saveFormItemData('password', event)} />
              <button>登录</button>
            </form>
          )
        }
      }

      // 2. 渲染组件到页面
      ReactDOM.render(<Login />, document.getElementById('test'))
    </script>
  </body>
</html>
